//
//  QGStatusCell.swift
//  斯威夫特微博
//
//  Created by youyoumacmini3 on 2017/7/19.
//  Copyright © 2017年 youyoumacmini3. All rights reserved.
//

import UIKit


/// 微博 cell 的协议
/// 如果需要设置可选协议方法
/// 需要遵守 NSObjectProtocol 协议
/// - 协议需要是 @objc 的
/// - 方法需要 @objc optional
@objc protocol QGStatusCellDelegate: NSObjectProtocol {
    
    /// 微博 cell 选中 URL 字符串
    @objc optional func statusCellDidSelectedURLString(cell: QGStatusCell, urlString: String)
    
}



/// 微博 cell
class QGStatusCell: UITableViewCell {

    weak var delegate: QGStatusCellDelegate?
    
    /// 微博视图模型
    var viewModel: QGStatusViewModel? {
        didSet{
            nameLabel.text = viewModel?.status.user?.screen_name // 姓名
            
            statusLabel.attributedText = viewModel?.statusAttrText //正文
            
            // 设置被转发微博文字
            retweetedLabel?.attributedText = viewModel?.retweetedAttrText
            
            // 设置会员图标 - 直接获取属性不需要计算(放在viewModel上做，每次上下刷的时候不需要一直重复计算，减少CPU的消耗)
            memberIconView.image = viewModel?.memberIcon
            // 认证图标
            vipIconView.image = viewModel?.vipIcon
            
            // 用户头像
            iconView.cz_setImage(urlStr: viewModel?.status.user?.profile_image_url, placeHolderImage: UIImage(named: "avatar_default_big"), isAvatar: true)
            // 底部工具栏
            toolBar.vModel = viewModel!
            
            // 配图视图的视图模型
            pictureView.viewModel = viewModel
            
            // 设置配图视图 url 数据 (被转发或原创)
            //pictureView.urls = viewModel?.picURLs
            
            // 配图视图的高度
            //pictureView.heightCons.constant = viewModel?.pictureViewSize.height ?? 0

    
            // 测试4张图
//            if viewModel?.status.pic_urls?.count ?? 0 > 4 {
//                // 修改数组
//                var picURLS = viewModel?.status.pic_urls!
//                
//                picURLS?.removeSubrange(((picURLS?.startIndex)! + 4)..<(picURLS?.endIndex)!)
//                pictureView.urls = picURLS
//            
//            }else{
//                pictureView.urls = viewModel?.status.pic_urls
//            }
            
            
            // 设置来源 (方法二 - 直接在model中对微博来源用didSet设置)
            sourceLabel.text = viewModel?.status.source
            //sourceLabel.text = viewModel?.sourceStr  （方法一）
            
            // 设置时间
            timeLabel.text = viewModel?.status.creatDate?.description
            
        }
    }
    
    
    @IBOutlet weak var iconView: UIImageView!//头像
    @IBOutlet weak var nameLabel: UILabel!//姓名
    @IBOutlet weak var memberIconView: UIImageView!//会员图标
    @IBOutlet weak var timeLabel: UILabel!//时间
    @IBOutlet weak var sourceLabel: UILabel!//来源
    @IBOutlet weak var vipIconView: UIImageView!//认证图标
    @IBOutlet weak var statusLabel: FFLabel!//正文
    
    // 底部工具栏
    @IBOutlet weak var toolBar: QGStatusToolBar!
    // 配图视图
    @IBOutlet weak var pictureView: QGStatusPicture!
    
    
  // 被转发微博的标签 - 原创微博没有此控件， 不能用!,一定要用?
    @IBOutlet weak var retweetedLabel: FFLabel?
    
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
       
        // 以下属于高级优化，如果cell的性能已经很好，就不需要离屏渲染
        // 因为离屏渲染需要在 GPU/CPU 之间快速切换，耗电会厉害

        
        
        // 离屏渲染 - 异步绘制
        self.layer.drawsAsynchronously = true
        
        // 栅格化 - 异步绘制之后，会生成一张独立的图像，cell在屏幕上滚动的时候，本质上滚动的是这张图片
        // cell 优化，要尽量减少图层的数量，相当于只有一层
        // 停止滚动之后，可以接受监听
        self.layer.shouldRasterize = true
        
        // 使用‘栅格化’ 必须注意指定分辨率
        self.layer.rasterizationScale = UIScreen.main.scale
        
        
        // 设置微博文本代理
        statusLabel.delegate = self
        retweetedLabel?.delegate = self
        
    }
}

extension QGStatusCell: FFLabelDelegate {
    
    func labelDidSelectedLinkText(label: FFLabel, text: String) {
        
        // 判断是否是 URL
        if !text.hasPrefix("http://") {
            return
        }
        
        // 插入问号表示如果代理没有实现协议方法，就什么都不做
        // 如果使用 !，代理没有实现协议方法，仍然强行执行，会崩溃
        delegate?.statusCellDidSelectedURLString?(cell: self, urlString: text)
    }
    
    
}


